package com.cs.paoyer.common.exception;

//import java.util.Vector;
//import java.util.Collection;

/**
 * Representan el conjunto de errores de tipo usuario para el m�dulo common
 * de la aplicaci�n.
 *
 */
public class CommonUserException implements ModuleExceptionInterface{

  /**
   * Informaci�n del m�dulo al que pertenece el error.
   */
  private static final int COMMON_MODULE = 9;

  /**
   * Ocurre cuando un value object es null.
   */
  public static final int VALUE_OBJECT_IS_NULL =
     COMMON_MODULE * USER_EXCEPTION + 1;

  /**
   * Ocurre cuando un value object es null.
   */
  public static final int REGISTER_NOT_FOUND =
      COMMON_MODULE * USER_EXCEPTION + 2;

  /**
   * Ocurre cuando un value object es null.
   */
  public static final int NULL_POINTER_EXCEPTION =
      COMMON_MODULE * USER_EXCEPTION + 3;

  /**
   * Ocurre cuando se duplica la llave primaria de una tabla.
   */
  public static final int DUPLICATE_PRIMARY_KEY =
      COMMON_MODULE * USER_EXCEPTION + 4;

  /**
   * Ocurre cuando se adiciona un registro mas grande que el determinado en la tabla.
   */
  public static final int VALUE_TOO_LARGE =
      COMMON_MODULE * USER_EXCEPTION + 5;

  /**
   * Ocurre cuando se intenta eliminar un registro que tiene asociacido otro registro.
   */
  public static final int ANOTHER_RECORD_ASOCIATED =
      COMMON_MODULE * USER_EXCEPTION + 6;

   /**
   * Esta tratando de adicionar un registro que contiene un caracter especial
   */
  public static final int RECORD_CONTAIN_SPECIAL_CHARACTER = 
         COMMON_MODULE * USER_EXCEPTION + 7;
         
  public static final int NOT_ALL_REQUIRED_FIELDS =
         COMMON_MODULE * USER_EXCEPTION  + 8;       
         
  public static final int NAME_DUPLICATE =
         COMMON_MODULE *  USER_EXCEPTION + 9;
         

    public static final int NUMBER_CAN_NOT_BE_CERO =
         COMMON_MODULE * USER_EXCEPTION + 10;
      
   public static final int NOT_ALLOWED_RESOURCE =
         COMMON_MODULE * USER_EXCEPTION + 11;      

	 public static final int INCORRECT_DATE_FORMAT =
         COMMON_MODULE * USER_EXCEPTION  + 12;
  
  public static final int INVALID_VALUE_FOR_MAIN_OPTION =
         COMMON_MODULE * USER_EXCEPTION  + 13;
  	
  /**
   * Retorna un objeto ExceptionVO que contienen informaci�n detallada
   * de un error que puede pasar en el m�dulo, seg�n el tipo de Excepcion
   * pasado en el tipo.
   * @param messageId int Identificador de la Excepcion definida para el modulo.
   * @return ExceptionVO
   */
  public ExceptionVO getExceptionVO(int exceptionId)throws SystemException {

      switch ( exceptionId ) {

          case VALUE_OBJECT_IS_NULL:
              return new ExceptionVO(this.VALUE_OBJECT_IS_NULL,
                                     this.COMMON_MODULE,
                                     "Value Object no puede ser null.",
                                     "El value object especificado es null.");

          case REGISTER_NOT_FOUND:
              return new ExceptionVO(this.REGISTER_NOT_FOUND,
                                     this.COMMON_MODULE,
                                     "Registro no encontrado",
                                     "Verifique que los datos suministrados para la busqueda del registro sean correctos.");

            case NULL_POINTER_EXCEPTION:
              return new ExceptionVO(this.NULL_POINTER_EXCEPTION,
                                     this.COMMON_MODULE,
                                     "Intentando trabajar con un valor nulo.",
                                     "Verifique que el dato ingresado sea distinto de nulo.");
            case DUPLICATE_PRIMARY_KEY:
              return new ExceptionVO(this.DUPLICATE_PRIMARY_KEY,
                                     this.COMMON_MODULE,
                                     "Ya existe un registro con el mismo valor del identificador.",
                                     "Cambie el valor del identificador del registro.");

            case VALUE_TOO_LARGE:
              return new ExceptionVO(this.VALUE_TOO_LARGE,
                                     this.COMMON_MODULE,
                                     "El registro que se intenta adicionar es demasiado grande.",
                                     "Cambie el tama�o del registro.");

            case ANOTHER_RECORD_ASOCIATED:
              return new ExceptionVO(this.ANOTHER_RECORD_ASOCIATED,
                                     this.COMMON_MODULE,
                                     "Imposible eliminar el registro.",
                                     "Existen otros registros asociados a este.");

           case RECORD_CONTAIN_SPECIAL_CHARACTER:
              return new ExceptionVO(this.RECORD_CONTAIN_SPECIAL_CHARACTER,
                                     this.COMMON_MODULE,
                                     "No se pueden adicionar caracteres especiales ",
                                     "intente con letras y numeros "); 
                                     
           case NOT_ALL_REQUIRED_FIELDS:
              return new ExceptionVO(this.NOT_ALL_REQUIRED_FIELDS,
                                     this.COMMON_MODULE,
                                     "No han sido llenados todos los campos requeridos ",
                                     "Por favor, introcuzca todos los campos requeridos ");  
                                     
           case NAME_DUPLICATE :
              return new ExceptionVO(this.NAME_DUPLICATE ,
                                     this.COMMON_MODULE,
                                     "Ya existe un registro con el mismo nombre",
                                     "Por favor, cambie el nombre y vuelvalo a intentar");  
                                     
           case NUMBER_CAN_NOT_BE_CERO :
              return new ExceptionVO(this.NUMBER_CAN_NOT_BE_CERO ,
                                     this.COMMON_MODULE,
                                     "El n�mero no puede ser cero o nulo",
                                     "Por favor, cambie el n�mero y vuelvalo a intentar");   
                                     
             case  NOT_ALLOWED_RESOURCE:
             return new ExceptionVO(this.NOT_ALLOWED_RESOURCE, this.COMMON_MODULE," No tiene permisos para acceder a este recurso", "No tiene permisos para acceder a este recurso");                 

						 case  INCORRECT_DATE_FORMAT:
             return new ExceptionVO(this.INCORRECT_DATE_FORMAT, this.COMMON_MODULE," La fecha ingresada no tiene el formato correcto", "Vuelva a introducir la fecha");                 
     
             case  INVALID_VALUE_FOR_MAIN_OPTION:
             return new ExceptionVO(this.INVALID_VALUE_FOR_MAIN_OPTION, this.COMMON_MODULE," VALOR INVALIDO DE LOS PARAMETROS PARA LA OPCION PRINCIPAL DE MENU.", "Vuelva a introducir los campos de la opcion");                 
          default:
              throw new ExceptionIdNotFound( exceptionId  );

      }


  }

  /**
   * Obtiene un objeto <code>ModuleVO</code> que contiene el nombre del modulo
   * y la clase que maneja las excepciones.
   *
   * @return Objeto <code>ModuleVO</code> que contiene el nombre del modulo
   * y la clase que maneja las excepciones.
   */
  public ModuleVO getModuleVO() {

    return new ModuleVO( "COMMON", this.getClass().getName() );
  }


}